使用 Jetpack Compose 提升 Play 商店的用户体验
作者 / Google Play 技术负责人 Andrew Flynn 和 Jon Boekenoogen
Jetpack Compose
https://developer.android.google.cn/jetpack/compose
从那时起,Google Play 商店与 Jetpack Compose 团队密切合作,发布并完善了满足我们特定需求的 Jetpack Compose 版本。本文将为您介绍我们的迁移方法以及在此过程中发现的挑战和优势,并分享一些对于有众多贡献者的应用选择 Compose 的洞察。
优先考虑
当我们对新的界面渲染层使用 Jetpack Compose 时,需要优先考虑以下两点:
开发者的工作效率: Play 商店团队有数百个工程师改进代码,因此开发起来应该很容易 (也很有趣)。
性能: Play 商店会渲染大量媒体密集型内容,其中很多业务指标对延迟和卡顿十分敏感,所以我们需要确保它在所有设备上表现良好,尤其是低内存硬件和 Android (Go 版本) 设备。
开发者的工作效率
总共 3 个视图类,其中 2 个需要自定义绘制圆角矩形和星形 约 350 行 Java 代码,55 行 XML
使用 Compose 编写,此表格包含:
所有的 @Composable 函数都包含在同一文件和语言中!
约 210 行 Kotlin 代码
Lottie https://airbnb.io/projects/lottie-android/
ExoPlayer
https://exoplayer.dev/YouTube Player
https://developers.google.google.cn/youtube/android/player
性能
基准配置文件
https://developer.android.google.cn/studio/profile/baselineprofiles云配置文件
https://android-developers.googleblog.com/2019/04/improving-app-performance-with-art.html
△ 实际操作中的重组可视化修饰符 (Modifiers)
蓝色 (无重组),绿色 (1 次重组)
核心机制
https://developer.android.google.cn/jetpack/compose/lifecycle@Stable
https://developer.android.google.cn/reference/kotlin/androidx/compose/runtime/Stable便捷指南
https://github.com/androidx/androidx/blob/androidx-main/compose/compiler/design/compiler-metrics.md修饰符 (Modifier)
https://github.com/android/snippets/blob/master/compose/recomposehighlighter/src/main/java/com/example/android/compose/recomposehighlighter/RecomposeHighlighter.kt
为 Play 商店应用优化 Compose 的另一个关键是为整个应用制定详细的端到端的迁移策略。在最初的集成实验中,我们遇到了双栈问题: 在单个用户会话中同时运行 Compose 和视图类渲染非常占用内存,尤其是在低端设备上。当代码在同一页面上运行时就会出现这种情况,当两个不同的页面 (例如,Play 商店主页和搜索结果页) 各自位于不同的堆栈上时,也会出现这种情况。为了改善这种启动延迟,我们为页面迁移到 Compose 的顺序和时间安排制定一个具体计划,这是非常重要的。同时我们发现,在应用迁移到完全使用 Compose 进行渲染使用之前,对一些通用类进行一定的 "预热" 是有助于提高内存性能的。
LazyList 项目类型缓存
https://android-review.googlesource.com/c/platform/frameworks/support/+/1789196/额外的对象分配
https://android-review.googlesource.com/c/platform/frameworks/support/+/1950996/
展望未来
APK 大小
https://developer.android.google.cn/jetpack/compose/ergonomics#apk-and-build
Jetpack Compose https://developer.android.google.cn/jetpack/compose
推荐阅读